import axios from 'axios';
import { message } from 'antd'

//请求拦截器

/* 
第一个回调函数
  参数req就是拦截的数据
    return 后面的就是给到服务器的数据
*/
axios.interceptors.request.use((req) => {
    /* 
    可以在这里做：
    1. 统一在请求头上添加token
    2. 如果是post请求，则我们可以对参数进行过滤，比如一些像null  undefined ""  
    
    */
    //    1. 统一在请求头上添加token
    const token = localStorage.getItem('token');
    if (token) {
        req.headers.token = token;
    }
    //2. 如果是post请求，则我们可以对参数进行过滤，比如一些像null  undefined "" 
    if (req.method === 'post') {
        //...
    }

    return req;
}, (err) => Promise.reject(err))




//响应拦截器
/* 
第一个回调函数
    形参res就是拦截的数据
    return 后面的就是给到前端页面的数据

*/
axios.interceptors.response.use((res) => {
    // console.log('res', res)
    /* 
    过滤数据
    
    */
    if (res.data.code === 1) {
        return res.data.data;
    } else {
        //统一处理code为0的错误
        message.error(res.data.msg)
        return Promise.reject(res)
    }
}, (err) => {
    console.dir(err)
    const response = err.response;
    if (response) {
        const status = response.status
        switch (status) {
            case 500:
                ///...
                break;
            case 401:
                //检验到token过期，清除本地存储，跳转到登录
                message.error("token过期，请重新登录")
                localStorage.removeItem('token');
                localStorage.removeItem('userInfo');
                window.location.hash = "#/login";
                break;
            case 404:
                //
                break;
        }
    }
    return Promise.reject(err)
    //统一处理错误
});